package main.resources.view;

import java.util.List;

import main.resources.exceptions.DaoException;
import main.resources.exceptions.InvalidDateException;
import main.resources.model.entity.moodle.MdlChat;
import main.resources.model.entity.moodle.MdlChoice;
import main.resources.model.entity.moodle.MdlChoiceOption;
import main.resources.model.entity.moodle.MdlCourse;
import main.resources.model.entity.moodle.MdlCourseCategory;
import main.resources.model.entity.moodle.MdlForum;
import main.resources.model.entity.moodle.MdlLesson;

public interface Fachada {
	
	/**
	 * 
	 * @param nome
	 * @param descricao
	 * @return
	 */
	public MdlCourseCategory cadastrarCategoria(String nome, String descricao);
	
	/**
	 * 
	 * @param categoria
	 * @throws DaoException 
	 */
	public void incluirCategoria(MdlCourseCategory categoria) throws DaoException;
	
	/**
	 * 
	 * @param categoria
	 * @throws DaoException 
	 */
	public void alterarCategoria(MdlCourseCategory categoria) throws DaoException;
	
	/**
	 * 
	 * @param categoria
	 * @throws DaoException
	 */
	public void removerCategoria(MdlCourseCategory categoria) throws DaoException;
	
	/**
	 * 
	 * @param idCategoria
	 * @return
	 * @throws DaoException
	 */
	public MdlCourseCategory buscarCategoria(String idCategoria) throws DaoException;
	
	/**
	 * 
	 * @return
	 * @throws DaoException
	 */
	public List<MdlCourseCategory> listarCategoria() throws DaoException;
	
	/**
	 * 
	 * @param categoria
	 * @param nomeCompleto
	 * @param nomeCurto
	 * @param data
	 * @param numSecoes
	 * @return
	 * @throws InvalidDateException
	 */
	public MdlCourse cadastrarCurso(MdlCourseCategory categoria, String nomeCompleto, String nomeCurto, String data, String numSecoes) throws InvalidDateException;
	
	/**
	 * 
	 * @param curso
	 * @throws DaoException
	 */
	public void incluirCurso(MdlCourse curso) throws DaoException;
	
	/**
	 * 
	 * @param curso
	 * @throws DaoException
	 */
	public void alterarCurso(MdlCourse curso) throws DaoException;
	
	/**
	 * 
	 * @param curso
	 * @throws DaoException
	 */
	public void removerCurso(MdlCourse curso) throws DaoException;
	
	/**
	 * 
	 * @param idCurso
	 * @return
	 * @throws DaoException
	 */
	public MdlCourse buscarCurso(String idCurso) throws DaoException;
	
	/**
	 * 
	 * @return
	 * @throws DaoException
	 */
	public List<MdlCourse> listarCurso() throws DaoException;
	
	/**
	 * 
	 * @param curso
	 * @param nome
	 * @param introducao
	 * @param data
	 * @return
	 * @throws InvalidDateException
	 */
	public MdlChat cadastrarChat(MdlCourse curso, String nome, String introducao, String data) throws InvalidDateException;
	
	/**
	 * 
	 * @param chat
	 * @throws DaoException
	 */
	public void incluirChat(MdlChat chat) throws DaoException;
	
	/**
	 * 
	 * @param chat
	 * @throws DaoException
	 */
	public void alterarChat(MdlChat chat) throws DaoException;
	
	/**
	 * 
	 * @param chat
	 * @throws DaoException
	 */
	public void removerChat(MdlChat chat) throws DaoException;
	
	/**
	 * 
	 * @param idChat
	 * @return
	 * @throws DaoException
	 */
	public MdlChat buscarChat(String idChat) throws DaoException;
	
	/**
	 * 
	 * @return
	 * @throws DaoException
	 */
	public List<MdlChat> listarChat() throws DaoException;
	/**
	 * 
	 * @param curso
	 * @param nome
	 * @param introducao
	 * @param data
	 * @return
	 * @throws InvalidDateException
	 */
	public MdlChoice cadastrarEscolha(MdlCourse curso, String nome, String introducao, String data) throws InvalidDateException;
	
	/**
	 * 
	 * @param escolha
	 * @throws DaoException
	 */
	public void incluirEscolha(MdlChoice escolha) throws DaoException;
	
	/**
	 * 
	 * @param escolha
	 * @throws DaoException
	 */
	public void editEscolha(MdlChoice escolha) throws DaoException;
	
	/**
	 * 
	 * @param escolha
	 * @throws DaoException
	 */
	public void removerEscolha(MdlChoice escolha) throws DaoException;
	
	/**
	 * 
	 * @param idEscolha
	 * @return
	 * @throws DaoException
	 */
	public MdlChoice buscarEscolha(String idEscolha) throws DaoException;
	
	/**
	 * 
	 * @return
	 * @throws DaoException
	 */
	public List<MdlChoice> listarEscolha() throws DaoException;
	
	/**
	 * 
	 * @param escolha
	 * @param texto
	 * @param data
	 * @return
	 * @throws InvalidDateException
	 */
	public MdlChoiceOption cadastrarOpcaoDeEscolha(MdlChoice escolha, String texto, String data) throws InvalidDateException;
	
	/**
	 * 
	 * @param opcao
	 * @throws DaoException
	 */
	public void incluirOpcaoDeEscolha(MdlChoiceOption opcao) throws DaoException;
	
	/**
	 * 
	 * @param opcao
	 * @throws DaoException
	 */
	public void editOpcaoDeEscolha(MdlChoiceOption opcao) throws DaoException;
	
	/**
	 * 
	 * @param opcao
	 * @throws DaoException
	 */
	public void removerOpcaoDeEscolha(MdlChoiceOption opcao) throws DaoException;
	
	/**
	 * 
	 * @param idOpcao
	 * @return
	 * @throws DaoException
	 */
	public MdlChoiceOption buscarOpcaoDeEscolha(String idOpcao) throws DaoException;
	
	/**
	 * 
	 * @return
	 * @throws DaoException
	 */
	public List<MdlChoiceOption> listarOpcaoDeEscolha() throws DaoException;
	
	/**
	 * 
	 * @param curso
	 * @param nome
	 * @param introducao
	 * @param data
	 * @return
	 * @throws InvalidDateException
	 */
	public MdlForum cadastrarForum(MdlCourse curso, String nome, String introducao, String data) throws InvalidDateException;
	
	/**
	 * 
	 * @param forum
	 * @throws DaoException
	 */
	public void incluirForum(MdlForum forum) throws DaoException;
	
	/**
	 * 
	 * @param forum
	 * @throws DaoException
	 */
	public void editForum(MdlForum forum) throws DaoException;
	
	/**
	 * 
	 * @param forum
	 * @throws DaoException
	 */
	public void removerForum(MdlForum forum) throws DaoException;
	
	/**
	 * 
	 * @param idForum
	 * @return
	 * @throws DaoException
	 */
	public MdlForum buscarForum(String idForum) throws DaoException;
	
	/**
	 * 
	 * @return
	 * @throws DaoException
	 */
	public List<MdlForum> listarForum() throws DaoException;
	
	/**
	 * 
	 * @param curso
	 * @param nome
	 * @param senha
	 * @param data
	 * @return
	 * @throws InvalidDateException
	 */
	public MdlLesson cadastrarLicao(MdlCourse curso, String nome, String senha, String data) throws InvalidDateException;
	
	/**
	 * 
	 * @param licao
	 * @throws DaoException
	 */
	public void incluirLicao(MdlLesson licao) throws DaoException;
	
	/**
	 * 
	 * @param licao
	 * @throws DaoException
	 */
	public void editLicao(MdlLesson licao) throws DaoException;
	
	/**
	 * 
	 * @param licao
	 * @throws DaoException
	 */
	public void removerLicao(MdlLesson licao) throws DaoException;
	
	/**
	 * 
	 * @param idLicao
	 * @return
	 * @throws DaoException
	 */
	public MdlLesson buscarLicao(String idLicao) throws DaoException;
	
	/**
	 * 
	 * @return
	 * @throws DaoException
	 */
	public List<MdlLesson> listarLicao() throws DaoException;
	
}
